package com.example.leetcode.part2120;

import com.example.leetcode.Sort;

/**
 * 现有一个 n x n 大小的网格，左上角单元格坐标 (0, 0) ，右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos ，其中 startPos = [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。
 *
 * 另给你一个长度为 m 、下标从 0 开始的字符串 s ，其中 s[i] 是对机器人的第 i 条指令：'L'（向左移动），'R'（向右移动），'U'（向上移动）和 'D'（向下移动）。
 *
 * 机器人可以从 s 中的任一第 i 条指令开始执行。它将会逐条执行指令直到 s 的末尾，但在满足下述条件之一时，机器人将会停止：
 *
 * 下一条指令将会导致机器人移动到网格外。
 * 没有指令可以执行。
 * 返回一个长度为 m 的数组 answer ，其中 answer[i] 是机器人从第 i 条指令 开始 ，可以执行的 指令数目 。
 *
 * 输入：n = 3, startPos = [0,1], s = "RRDDLU"
 * 输出：[1,5,4,3,1,0]
 * 解释：机器人从 startPos 出发，并从第 i 条指令开始执行：
 * - 0: "RRDDLU" 在移动到网格外之前，只能执行一条 "R" 指令。
 * - 1:  "RDDLU" 可以执行全部五条指令，机器人仍在网格内，最终到达 (0, 0) 。
 * - 2:   "DDLU" 可以执行全部四条指令，机器人仍在网格内，最终到达 (0, 0) 。
 * - 3:    "DLU" 可以执行全部三条指令，机器人仍在网格内，最终到达 (0, 0) 。
 * - 4:     "LU" 在移动到网格外之前，只能执行一条 "L" 指令。
 * - 5:      "U" 如果向上移动，将会移动到网格外。

 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/execution-of-all-suffix-instructions-staying-in-a-grid
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Solution {

    private static char[] c;
    private static int n;

    public static int[] executeInstructions(int n, int[] startPos, String s) {
        Solution.n = n;
        c = s.toCharArray();
        int ans[] = new int[s.length()];
        for (int i = 0; i < s.length(); i++) {
            ans[i] = mostSteps(startPos[0], startPos[1], i);
        }
        return ans;
    }

    public static int mostSteps(int x, int y, int start) {
        int step = 0;
        for (int i = start; i < c.length; i++) {
            switch (c[i]) {
                case 'U':
                    x--;
                    break;
                case 'D':
                    x++;
                    break;
                case 'L':
                    y--;
                    break;
                case 'R':
                    y++;
                    break;
                default:
                    break;
            }
            if (x == -1 || y == -1 || x == n || y==n) {break;}
            step++;
        }
        return step;
    }

//    public static int mostSteps(int x, int y, int start) {
//        int ans = 0;
//        for (int i = start; i < c.length; i++) {
//            if (c[i] == 'U') {x--;}
//            else if (c[i] == 'D') {x++;}
//            else if (c[i] == 'L') {y--;}
//            else {y++;}
//            if (x == -1 || y== -1 || x == n || y == n) {break;}
//            ans++;
//        }
//        return ans;
//    }


    public static void main(String[] args) {
        int[] s = {0,1};
        int[] res = executeInstructions(3, s, "RRDDLU");
        Sort.printArr(res);
    }


}
